home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume89 / iff / iff2sun.1 < prev    next >
Text File  |  1989-05-18  |  18KB  |  631 lines

  1. Path: xanth!ames!amdahl!oliveb!sun!swap!page
  2. From: page%swap@Sun.COM (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v89i137:  iff2sun - convert iff images to sun bitmaps
  5. Message-ID: <105540@sun.Eng.Sun.COM>
  6. Date: 17 May 89 14:42:45 GMT
  7. Sender: news@sun.Eng.Sun.COM
  8. Lines: 620
  9. Approved: page@sun.com
  10.  
  11. Submitted-by: raz@kilowatt.sun.com (Steve -Raz- Berry)
  12. Posting-number: Volume 89, Issue 137
  13. Archive-name: iff/iff2sun.1
  14.  
  15. Added Extra-half-bright support and pixel replicating code.  I'm still
  16. looking for the best way to convert HAM (4096) to 8 bit (256) format.
  17.  
  18. # This is a shell archive.
  19. # Remove anything above and including the cut line.
  20. # Then run the rest of the file through 'sh'.
  21. # Unpacked files will be owned by you and have default permissions.
  22. #----cut here-----cut here-----cut here-----cut here----#
  23. #!/bin/sh
  24. # shar: SHell ARchive
  25. # Run the following text through 'sh' to create:
  26. #    iff2sun.c
  27. #    Makefile
  28. #    DOC
  29. # This is archive 1 of a 1-part kit.
  30. # This archive created: Wed May 17 19:35:50 1989
  31. echo "extracting iff2sun.c"
  32. sed 's/^X//' << \SHAR_EOF > iff2sun.c
  33. X/*
  34. X**      This Program created (under tremendous pressure) by Steve Berry
  35. X**      with help and modifications by Mark Thompson.
  36. X**
  37. X**      I hope you guys keep it clean. (If you don't, let me know :-)
  38. X**
  39. X**      Status: PD all the way.
  40. X**
  41. X**      What's it do? This little guy reads an Amiga IFF ILBM file and 
  42. X**      outputs sun rasterfile format. GIGO (Georgous In Garbage Out).
  43. X**
  44. X**    USEAGE: iff2sun [-c] infile outfile
  45. X**        if infile is not specified stdin is used.
  46. X**        if outfile is not specified then stdout is used.
  47. X**      the -c flag yields a color rasterfile (greyscale is default).
  48. X**      the -h flag switches extra half-bright mode on.
  49. X**
  50. X**    Note: this program outputs an 8 bitplane sun file with color table,
  51. X**    which defaults to shades of gray. Using the -c color flag will
  52. X**      put the IFF color table into the rasterfile. If you want to display
  53. X**      this on a monochrome tube (which is what I have) you should go 
  54. X**      through the folowing steps:
  55. X**
  56. X**        1) iff2sun inputfile outputfile
  57. X**        2) rastrepl outputfile output.bigger
  58. X**        3) rasfilter8to1 -d output.bigger output.mono
  59. X**
  60. X**    The rastrepl just pixel replicates the image so that it large
  61. X**    enough to see the detail. you can run this as many times as you
  62. X**    like, but remember the image quadruples each time you use it.
  63. X**
  64. X**        The rasfilter8to1 program converts the color file (8 bit
  65. X**    planes) to mono (1 plane) and does some fancy dithering (-d).
  66. X**
  67. X**    Limitations:
  68. X**              No HAM mode yet.
  69. X**        Also, I have only tested this on DPaintII images, it is
  70. X**        very possible that it might break with other formats.
  71. X**        Unlikely, but possible :*)
  72. X**
  73. X**    CREDITS:
  74. X**            Mark Thompson
  75. X**            Steve (Raz) Berry
  76. X**
  77. X**    Contacts:
  78. X**                Steve Berry ...sun!kilowatt!raz or 
  79. X**                                             raz%kilowatt.EBay@sun.com
  80. X**                                          BIX: razberry
  81. X**                              Mark Thompson  ...decvax!savax!thompson
  82. X**
  83. X**      Revision History:
  84. X**
  85. X**      10/31/88 First release, does only simple conversion and no color.
  86. X**
  87. X**      12/88    Re-released with color support. Unfortunately few if any
  88. X**               one saw this release (it got lost on the way to the moderator)
  89. X**               (This is Mark's claim to fame)
  90. X**
  91. X**      4/26/89  Added Extra-half-bright support, also looking for the
  92. X**               best way to convert HAM (4096) to 8 bit (256) format.
  93. X*/
  94. X
  95. X#include <stdio.h>
  96. X#include <rasterfile.h>
  97. X
  98. X#define HAM 0x800       /* Amiga Viewmodes */
  99. X#define HALF 0x80
  100. X#define HIRES 0x8000
  101. X#define LACE 0x4
  102. X#define TRUE 1
  103. X#define FALSE 0
  104. X
  105. X/* Stupic C needs to be told about functions used before they
  106. X   are defined */
  107. X
  108. Xunsigned char RGBtoLuma();
  109. Xlong parse();
  110. X
  111. X/* Some variables and arrays */
  112. X
  113. Xunsigned char    rmap[128],rhmap[128];
  114. Xunsigned char    gmap[128],ghmap[128];
  115. Xunsigned char    bmap[128],bhmap[128];
  116. X
  117. Xunsigned char scanline[1024][6][128]; /* vert, planes, width (bytes) */
  118. Xlong width, hieght, planes, viewmode, numcolors;
  119. Xlong temp, compress, i, j, k, l;
  120. Xint colorpic=FALSE, halfb = FALSE;
  121. X
  122. Xmain(argc,argv)
  123. Xint argc;
  124. Xchar **argv;
  125. X{
  126. X    struct rasterfile header;
  127. X    unsigned char clr;
  128. X    long formsize;
  129. X    static char chunk[5];
  130. X    FILE *inh, *outh;
  131. X    char    *progname= argv[0];
  132. X        
  133. X    chunk[4] = 0;
  134. X        
  135. X    inh = stdin;
  136. X    outh = stdout;
  137. X
  138. X    for (i=1;i<3;i++){
  139. X      if (argv[1][0] == '-') {
  140. X        switch (argv[1][1]){
  141. X          case 'c':
  142. X        colorpic = TRUE;
  143. X        --argc;
  144. X        ++argv;
  145. X        fprintf(stderr,"Color output selected\n");
  146. X        break;
  147. X          case 'h':
  148. X        halfb = TRUE;
  149. X        --argc;
  150. X        ++argv;
  151. X        fprintf(stderr,"Extra Half-bright selected\n");
  152. X        break;
  153. X          }
  154. X      } else break;
  155. X    }
  156. X
  157. X    switch (argc) {
  158. X        case 0:
  159. X            exit(0);
  160. X        case 1:
  161. X            break;
  162. X        case 2:
  163. X            inh = fopen(argv[1],"r");
  164. X            break;
  165. X        case 3:
  166. X            inh = fopen(argv[1],"r");
  167. X            outh = fopen(argv[2],"w");
  168. X            break;
  169. X        default:
  170. X            fprintf(stderr,"Useage %s: -c|-h infile outfile, or stdio\n", argv[0]);
  171. X            fprintf(stderr," -c is the flag to output color \
  172. X                (greyscale is default)\n and -h indicates Halfbright mode.\n");
  173. X            exit(0);
  174. X            break;
  175. X    }
  176. X        
  177. X    if (inh == NULL){
  178. X        perror(argv[1]);
  179. X        exit(-10);
  180. X    }        
  181. X
  182. X    if (outh == NULL){
  183. X        perror(argv[2]);
  184. X        exit(-10);
  185. X    }        
  186. X
  187. X    /* Now comes the fun part... Reading the ILBM's */
  188. X        
  189. X    if (parse(inh,"FORM")) {
  190. X        perror("I don't think that this is an IFF file");
  191. X        exit(-10);
  192. X    }
  193. X
  194. X    fread(&formsize, 4, 1, inh);    /* length of the FORM */
  195. X
  196. X    if (parse(inh,"ILBM")) {
  197. X        perror("I don't think that this is an ILBM");
  198. X        exit(-10);
  199. X    }
  200. X
  201. X    if (parse(inh,"BMHD")) { 
  202. X        perror("Bad format for ILBM.");
  203. X        exit(-10);
  204. X    }
  205. X
  206. X    cc(chunk);
  207. X    fread(chunk, 4, 1, inh);    /* length of the BMHD */
  208. X
  209. X    cc(chunk);
  210. X    fread(chunk, 2, 1, inh);    /* width of bitmap */
  211. X    width = *((short *)chunk);
  212. X
  213. X    cc(chunk);
  214. X    fread(chunk, 2, 1, inh);    /* Height of bitmap */
  215. X    hieght = *((short *)chunk);
  216. X
  217. X    fread(chunk, 4, 1, inh);    /* Don't want the orgins */
  218. X
  219. X    cc(chunk);
  220. X    fread(chunk, 1, 1, inh);    /* # of Planes */
  221. X    planes = *((unsigned char *)chunk);
  222. X
  223. X    fread(chunk, 1, 1, inh);    /* Ignore the Mask */
  224. X
  225. X    cc(chunk);
  226. X    fread(chunk, 1, 1, inh);    /* Compression? */
  227. X
  228. X    compress = *((unsigned char *)chunk);
  229. X
  230. X    fread(chunk, 1, 1, inh);    /* just a pad byte */
  231. X
  232. X/***********************************************************************
  233. X**    DpaintII does not use the CAMG chunk, so we will have to ignore
  234. X**    it for now...
  235. X***********************************************************************/
  236. X
  237. X/*    if (planes == 6) {
  238. X        perror("Sorry, I can't do HAM or Halfbright.");
  239. X        exit(0);
  240. X    } */
  241. X
  242. X    if (parse(inh,"CMAP")) {
  243. X        perror("Bad format for ILBM, couldn't find Color Map.");
  244. X    exit(-10);
  245. X    } 
  246. X
  247. X    cc(chunk);
  248. X    fread(chunk, 4, 1, inh);    /* # of color registers */
  249. X    numcolors = *((long *)chunk);
  250. X        
  251. X    for(i=0; i<64; i++) {
  252. X      rmap[i]= i;
  253. X      gmap[i]= i;
  254. X      bmap[i]= i;
  255. X    }
  256. X
  257. X    numcolors = numcolors/3 ;
  258. X    for (i=0;i<numcolors;i++){
  259. X        fread(chunk, 3, 1, inh);
  260. X        chunk[3] = 0; chunk[4] = 0; 
  261. X        chunk[0] = (chunk[0] >> 4) & 0x0f;
  262. X        chunk[2] = (chunk[2] >> 4) & 0x0f;
  263. X        chunk[1] = (chunk[1] >> 4) & 0x0f;
  264. X        if(colorpic==TRUE) {
  265. X          rmap[i] = (chunk[0] << 4) | chunk[0];
  266. X          gmap[i] = (chunk[1] << 4) | chunk[1];
  267. X          bmap[i] = (chunk[2] << 4) | chunk[2];
  268. X        } else {
  269. X          rmap[i] = RGBtoLuma(chunk);
  270. X          gmap[i] = RGBtoLuma(chunk);
  271. X          bmap[i] = RGBtoLuma(chunk);
  272. X        }
  273. X        if (halfb == TRUE) {
  274. X          rhmap[i] = rmap[i]>>1;
  275. X          ghmap[i] = gmap[i]>>1;
  276. X          bhmap[i] = bmap[i]>>1;
  277. X        }
  278. X    }
  279. X
  280. X    if (numcolors == 2)    /* if a mono image, realign to long word */
  281. X        fread(chunk,1,2,inh);
  282. X
  283. X    if (parse(inh,"BODY")){
  284. X        perror("No BODY data.");
  285. X        exit(0);
  286. X    }
  287. X
  288. X    if ((planes == 6) && (halfb == TRUE) && (numcolors == 16)
  289. X          || (planes != 6) && (halfb == TRUE)){
  290. X      perror("You specified Half-Bright, but file is not in the correct format\n");
  291. X      exit(0);
  292. X    }
  293. X
  294. X    fread(chunk, 4, 1, inh);    /* length of body */
  295. X
  296. X    header.ras_magic= 0x59a66a95;
  297. X#ifndef PIXELREP
  298. X    header.ras_width= width;
  299. X#else
  300. X    header.ras_width= width * 2;
  301. X#endif
  302. X      header.ras_height= hieght;
  303. X      header.ras_depth= 8;
  304. X#ifndef PIXELREP
  305. X    header.ras_length= width * hieght;
  306. X#else
  307. X    header.ras_length= width * 2 * hieght;
  308. X#endif
  309. X      header.ras_type= RT_STANDARD;
  310. X      header.ras_maptype= RMT_EQUAL_RGB;
  311. X      header.ras_maplength= 3*256;
  312. X
  313. X/* Write out the rasterfile header to the ouput */
  314. X
  315. X    fwrite(&header, sizeof(header), 1, outh);
  316. X
  317. X/* Write out the red colormap to the ouput */
  318. X
  319. X
  320. X    if (fwrite(rmap, sizeof(rmap), 1, outh) == 0) {
  321. X      perror(progname);
  322. X      exit(1);
  323. X    } 
  324. X    if (halfb == TRUE) 
  325. X      fwrite(rhmap, sizeof(rhmap), 1, outh);
  326. X    else 
  327. X      fwrite(rmap, sizeof(rmap), 1, outh);
  328. X
  329. X/* Write out the green colormap to the ouput */
  330. X    
  331. X    if (fwrite(gmap, sizeof(gmap), 1, outh) == 0) {
  332. X      perror(progname);
  333. X      exit(1);
  334. X    } 
  335. X    if (halfb == TRUE) 
  336. X      fwrite(ghmap, sizeof(ghmap), 1, outh);
  337. X    else 
  338. X      fwrite(gmap, sizeof(gmap), 1, outh);
  339. X
  340. X/* Write out the blue colormap to the ouput */
  341. X
  342. X    if (fwrite(bmap, sizeof(bmap), 1, outh) == 0) {
  343. X      perror(progname);
  344. X      exit(1);
  345. X    } 
  346. X    if (halfb == TRUE) 
  347. X      fwrite(bhmap, sizeof(bhmap), 1, outh);
  348. X    else 
  349. X      fwrite(bmap, sizeof(bmap), 1, outh);
  350. X
  351. X/* This part does all the work */
  352. X
  353. X/* Either we uncompress the file, or we read it in... */
  354. X
  355. X    if (compress == 1)
  356. X        uncompress(planes, width, inh);
  357. X    else 
  358. X        for(k = 0;k<hieght;k++)
  359. X            for(i = 0;i<planes;i++) {
  360. X                for(j=0;j<width/8;j++){
  361. X                    cc(chunk);
  362. X                    if(feof(inh))
  363. X                        continue;
  364. X                    fread(chunk, 1, 1, inh);
  365. X                    scanline[k][i][j] = *((unsigned char *)chunk);
  366. X                }
  367. X            }
  368. X
  369. X/* Here we take the data and output it (finally!) */
  370. X
  371. X    for(j = 0;j<hieght;j++){
  372. X        for(i = 0;i<width/8;i++)
  373. X            process_pixel(i,j,outh);
  374. X    }
  375. X    fclose(inh);
  376. X    fclose(outh);
  377. X} /* end of main */
  378. X
  379. X/* The uncompression routine                     */
  380. X/* Here we uncompress the data for the number of planes     */
  381. X/* and store it in the global array scanline[][][]         */
  382. X/* Credits: Leo (the great Caped one) was the originator of the */
  383. X/* code I ripped this off from.                 */
  384. X
  385. Xuncompress(planes, width, inh)
  386. XFILE *inh;
  387. Xlong planes, width;
  388. X{
  389. X    long i,j,count,bytesperrow;
  390. X    char len;
  391. X    unsigned char byte;
  392. X
  393. X    for(i=0;i<hieght;i++){
  394. X        for(j=0;j<planes;j++){
  395. X            count = 0;
  396. X            bytesperrow = width / 8;
  397. X            while(bytesperrow > 0){
  398. X                if ((len = getc(inh)) >= 0){
  399. X                    bytesperrow -= ++len;
  400. X                    fread(&scanline[i][j][count],len,1,inh);
  401. X                    count += len;
  402. X                } else if (len == -128)
  403. X                    ;
  404. X                else if (len < 0){
  405. X                    len = -len + 1;
  406. X                    bytesperrow -= len;
  407. X                    byte = getc(inh);
  408. X                    while(--len >= 0)
  409. X                        scanline[i][j][count++] = byte;
  410. X                }
  411. X            }
  412. X            if(bytesperrow)
  413. X                perror("Compression is messed.");
  414. X        }
  415. X        
  416. X    }
  417. X}
  418. X
  419. X
  420. X/* RGBtoLuma converts the colortable from the Amiga to Luminance information */
  421. X/* This routine was written by Mark Thompson                      */
  422. X
  423. Xunsigned char RGBtoLuma(color)
  424. Xunsigned char *color;
  425. X{
  426. X    unsigned char r, g, b;
  427. X    unsigned char grey;
  428. X    float fgrey;
  429. X
  430. X    r = (color[0] << 4) + color[0];
  431. X    g = (color[1] << 4) + color[1];
  432. X    b = (color[2] << 4) + color[2];
  433. X    fgrey = 0.3 * r + 0.59 * g + 0.11 * b + 0.5;
  434. X    grey = fgrey;
  435. X    return grey;
  436. X}
  437. X
  438. X/* Process the byte for the scanline         */
  439. X/* Can you say shift 3 times fast?         */
  440. X
  441. Xprocess_pixel(byte,scan,outh)
  442. XFILE *outh;
  443. Xunsigned char byte;
  444. Xlong scan;
  445. X{
  446. X    long j, i, p, result = 0;
  447. X    unsigned char temp;
  448. X
  449. X    temp = 0; result = 0;
  450. X    for(i=7;i>=0;i--){
  451. X        for(p=0;p<planes;p++) 
  452. X            result = ((((1 << i) & scanline[scan][p][byte])>>i)<<p) | result;
  453. X        result = result & 0x3f;
  454. X        temp = result;
  455. X        fwrite(&temp, 1, 1, outh);
  456. X#ifdef PIXELREP
  457. X        fwrite(&temp, 1, 1, outh);
  458. X#endif
  459. X        result = 0;
  460. X    }
  461. X}
  462. X
  463. X/* look for a chunk in the file */
  464. Xlong parse(inh, str)
  465. XFILE *inh;
  466. Xchar *str;
  467. X{
  468. X        static char chunk[5];
  469. X        chunk[4] = 0;
  470. X        while (strncmp(chunk,str,4)!=0){
  471. X                fread(chunk, 4, 1, inh);
  472. X                if(feof(inh)!=0)
  473. X                        return TRUE;
  474. X        }
  475. X        return FALSE;
  476. X}
  477. X
  478. X/* Clear Chunk variable */
  479. X
  480. Xcc(chunk)
  481. Xchar chunk[5];
  482. X{
  483. X    register int i;
  484. X    for(i=0;i<5;i++)
  485. X        chunk[i] = 0;
  486. X}
  487. SHAR_EOF
  488. echo "extracting Makefile"
  489. sed 's/^X//' << \SHAR_EOF > Makefile
  490. X#
  491. X#    Makefile for iff2sun
  492. X#
  493. X#    Steve -Raz- Berry
  494. X#    4/25/89
  495. X#
  496. X#CFLAGS = -O
  497. XCFLAGS = -O -DPIXELREP
  498. X#
  499. X# PIXELREP will output 2 pixel color values for each actual pixel found.
  500. X# this helps correct some of the aspect ratio differences between the 
  501. X# Amiga and the Sun. If you don't like it... turn it off.
  502. X
  503. XOBJS = iff2sun.o
  504. X
  505. Xiff2sun:    $(OBJS)
  506. X    cc $(CFLAGS) -o $@ $@.c
  507. X
  508. Xclean:
  509. X    rm $(OBJS)
  510. SHAR_EOF
  511. echo "extracting DOC"
  512. sed 's/^X//' << \SHAR_EOF > DOC
  513. X
  514. X                       Iff2sun revision 3, documentation.
  515. X
  516. X        This Program created (under tremendous pressure) by Steve Berry
  517. X        with help and modifications by Mark Thompson.
  518. X  
  519. X        What's it do? This little guy reads an Amiga IFF ILBM file and 
  520. X        outputs sun rasterfile format. GIGO (Georgous In Garbage Out).
  521. X
  522. X        I hope you guys keep it clean. (If you don't, let me know :-)
  523. X  
  524. X        Status: PD all the way.
  525. X  
  526. X        To properly use this program, you must unshar the distribution
  527. X        and type 'make'. Place the binary in a convient directory.
  528. X
  529. X        MAKE your executable on a Sun! It does you very little good
  530. X        to try to compile this on your Amiga.
  531. X  
  532. X      USEAGE: iff2sun [-c | -h] infile outfile
  533. X          if infile is not specified stdin is used.
  534. X          if outfile is not specified then stdout is used.
  535. X        the -c flag yields a color rasterfile (greyscale is default).
  536. X        the -h flag switches extra half-bright mode on.
  537. X  
  538. X      Note: this program outputs an 8 bitplane sun file with color table,
  539. X      which defaults to shades of gray. Using the -c color flag will
  540. X        put the IFF color table into the rasterfile. If you want to display
  541. X        this on a monochrome tube (which is what I have) you should go 
  542. X        through the folowing steps:
  543. X  
  544. X          1) iff2sun inputfile outputfile
  545. X          2) rastrepl outputfile output.bigger
  546. X          3) rasfilter8to1 -d output.bigger output.mono
  547. X  
  548. X      The rastrepl just pixel replicates the image so that it is large
  549. X      enough to see the detail. you can run this as many times as you
  550. X      like, but remember the image quadruples each time you use it.
  551. X  
  552. X          The rasfilter8to1 program converts the color file (8 bit
  553. X      planes) to mono (1 plane) and does some fancy dithering (-d).
  554. X  
  555. X                To prepare an image for a color system, just include
  556. X        the -c switch and either display it as it is, or replicate it
  557. X        to the desired size first.
  558. X
  559. X      Limitations:
  560. X          Don't do HAM yet. I'm working on it.
  561. X          Also, I have only tested this on DPaintII images, it is
  562. X          very possible that it might break with other formats.
  563. X          Unlikely, but possible :*)
  564. X
  565. X    NOTES:
  566. X        Using Extra-half-bright mode, or any 320x400 format will
  567. X    produce an image that will looked elongated on a Sun screen. There
  568. X    are several ways to fix this. The easiest is to convert your pictures
  569. X    to 640x400 mode and then display them. The second easiest is to rip
  570. X    out 1/3 of the horizontal scan lines in the resultant image. The third
  571. X    is to have ME write iff2sun to pixel replicate horizontally to offset
  572. X    the aspect ratio change. If the third option is the only one acceptable
  573. X    to you, then you are in luck. All you have to do is compile iff2sun 
  574. X    with the -DPIXELREP defined. You will now get pictures that will look 
  575. X    somewhat better in this 320 (lo-res) mode. Remember, the executable will
  576. X    now only pixel-replicate in the horizontal direction, and it will
  577. X    ALWAYS do this. That means that a 640 (hi-res) image will come out 1280x400
  578. X    before you do anything to it. You may want to keep two copies of the
  579. X    program around, one that does 320 (lo-res) images and pixel-replicates,
  580. X    and one that will not pixel-replicate for the hires images. I'll probably
  581. X    just add a switch in the next version rather than force you to recompile.
  582. X  
  583. X      CREDITS:
  584. X              Mark Thompson
  585. X              Steve -Raz- Berry
  586. X  
  587. X      Contacts:
  588. X                  Steve Berry ...sun!kilowatt!raz or 
  589. X                                               raz%kilowatt.EBay@sun.com
  590. X                                            BIX: razberry
  591. X                                Mark Thompson  ...decvax!savax!thompson
  592. X  
  593. X        Revision History:
  594. X  
  595. X        10/31/88 First release, does only simple conversion and no color.
  596. X  
  597. X        12/88    Re-released with color support. Unfortunately few if any
  598. X                 one saw this release (it got lost on the way to the moderator)
  599. X                 (This modification is Mark's claim to fame)
  600. X  
  601. X        4/26/89  Added Extra-half-bright support, also looking for the
  602. X                 best way to convert HAM (4096) to 8 bit (256) format.
  603. X         Also stuck in the pixel replicating code (trivial).
  604. X
  605. Xswb 4/27/89
  606. X-------
  607. X
  608. XThis is the revision 2 update information as posted by Mark Thompson.
  609. X
  610. X
  611. XWell I said I would do it, so here it is....the modified and improved
  612. Xversion of iff2sun. The following changes have been made:
  613. X
  614. X1) Can now convert IFF images up to 1024 lines vertical resolution.
  615. X    (horizontal res is still 1024)
  616. X2) Improved greyscale contrast.
  617. X3) Now generates a Sun Rasterfile colormap.
  618. X4) Supports either greyscale or color output.
  619. X
  620. XAs for the problems some people have been having with the notorious
  621. X'compression messed' error, it seems this is due to certain implementations
  622. Xof kermit. Binary mode kermit in vt100 on the Amiga does work. If you
  623. Xdon't have any luck with this method, uuencode seems to perform flawlessly.
  624. X
  625. XMark Thompson
  626. Xdecvax!savax!thompson
  627. SHAR_EOF
  628. echo "End of archive 1 (of 1)"
  629. # if you want to concatenate archives, remove anything after this line
  630. exit
  631.